package 笔试;

import java.util.*;


public class Leecode {
    public static ArrayList<Integer> SLB (ArrayList<ArrayList<Integer>> operators) {
        // write code here
        ArrayList<Integer> res = new ArrayList<>();
        for (ArrayList<Integer> list : operators) {
            if (list.size() == 1) {
                int num = select();
                res.add(num);
            } else {
                if (list.get(0) == 1) {
                    add(list.get(1));
                } else if (list.get(0) == 2) {
                    delete(list.get(1));
                } else {
                    release(list.get(1));

                }
            }
        }
        return res;
    }
    static class Node{
        int num;
        boolean aBoolean;
        public Node(){};
        public Node(int num,boolean b){
            this.num=num;
            this.aBoolean=b;
        }
    }
    static Queue<Node> queue=new LinkedList<>();
    static HashMap<Integer, Node> hashMap=new HashMap<>();
    private static void add(Integer integer) {
        Node node=hashMap.get(integer);
        if(node==null){
            Node node1=new Node(integer,true);
            queue.add(node1);
            hashMap.put(integer,node1);
        }

    }
    private static void delete(Integer integer) {
        Node node=hashMap.get(integer);
        if(node!=null){
            hashMap.remove(integer);
            queue.remove(node);
        }

    }
    private static void release(Integer integer) {
       Node node=hashMap.get(integer);
       if(node!=null){
           node.aBoolean=true;
       }


    }
    private static int select() {
       for (Node node:queue){
           if(node.aBoolean==true){
               node.aBoolean=false;
               return node.num;
           }
       }
       return hashMap.size();

    }


    public static void main(String[] args) {
       //[[2,1],[2,2],[4,3],[3],[1,1],[3], [3]]
       ArrayList<Integer> list1=new ArrayList();
       list1.add(2);
       list1.add(1);
        ArrayList<Integer> list2=new ArrayList();
       list2.add(2);
       list2.add(2);
        ArrayList<Integer> list3=new ArrayList();
       list3.add(4);
       list3.add(3);
        ArrayList<Integer> list4=new ArrayList();
       list4.add(3);
        ArrayList<Integer> list5=new ArrayList();
       list5.add(1);
       list5.add(1);
        ArrayList<Integer> list6=new ArrayList();
        list6.add(3);
        ArrayList<Integer> list7=new ArrayList();
        list7.add(3);

        ArrayList<ArrayList<Integer>> lists=new ArrayList<>();
        lists.add(list1);
        lists.add(list2);
        lists.add(list3);
        lists.add(list4);
        lists.add(list5);
        lists.add(list6);
        lists.add(list7);
        ArrayList<Integer> res=SLB(lists);
        for (int i:res){
            System.out.println(i);
        }
    }
}
